Tailwindcss(v4) 우선순위 정리
마지막 수정일: 2025. 09. 01.
TL;DR
- 레이어 순서:
base → components → utilities → (레이어 바깥 CSS) - 특이성:
!important > inline style > id > class/attr/pseudo-class > tag > * - 동일 특이성: 나중에 나온 규칙이 이긴다.
- Tailwind v4 유틸은 보통
:where(.text-*)로 만들어져 특이성 0이다. - 전역 태그 선택자(
span {})는 특이성 1이라 유틸을 이길 수 있다 → 필요하면@layer base {}안으로.
1) Tailwind의
Tailwind는 기본적으로 3개의 레이어를 사용합니다:
@layer base
- reset/normalize, 태그 전역 스타일(html, body, h1…)
- 예:
@layer base {
body { @apply text-gray-800; }
h1 { @apply text-2xl font-bold; }
}
@layer components
- 재사용 컴포넌트 스타일(버튼, 카드 등)
- 예:
```css
@layer components {
.btn { @apply px-3 py-2 rounded bg-blue-500 text-white; }
}
```
@layer utilities
- text-*, bg-*, flex, mt-4 같은 유틸리티 클래스들
- 일반적으로 가장 마지막에 로드되어 base/components보다 우선한다.
중요:
@layer바깥(그냥global.css에 쓴) 스타일은 이 세 레이어보다 뒤에 위치합니다. 즉, 레이어 밖 CSS가 가장 강력해질 수 있어요(특이성/순서 측면에서).
2) “레이어 밖(unlayered) CSS”는 어디에 놓이나?
Tailwind가 출력한
base → components → utilities뒤에 그냥 작성된 CSS가 온다고 보면 됩니다.그래서
span { color: ... }같은 전역 태그 규칙을 레이어 밖에 두면text-…유틸을 쉽게 덮어버립니다.해결: 전역 태그 스타일은 가급적
@layer base {}안으로.
3)
(높음 → 낮음)
!important(중요도)inline style:
<div style="color:red">ID 선택자:
#appClass/속성/의사클래스:
.card,[type="button"],:hover,:focus태그(타입) 선택자:
div,span,h1*(universal)